home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / lang / amigatalk.lha / system / EList.st < prev    next >
Text File  |  2002-05-19  |  3KB  |  131 lines

  1. " ------------------------------------------------------------------- "
  2. " The EList Class implements Exec list functions.                     "
  3. " ------------------------------------------------------------------- "
  4.  
  5. Class EList :Object ! private listName !
  6. [
  7.    insertNode: nodeObj Into: listObj after: predObj
  8.       <primitive 209 4 41 listObj nodeObj predObj>
  9. |
  10.    addHead: nodeObj to: listObj
  11.       <primitive 209 4 42 listObj nodeObj>
  12. |
  13.    addTail: nodeObj to: listObj
  14.       <primitive 209 4 43 listObj nodeObj>
  15. |
  16.    removeNode: nodeObj
  17.       <primitive 209 4 44 nodeObj>
  18. |
  19.    removeHeadFrom: listObj
  20.       ^ <primitive 209 4 45 listObj>
  21. |
  22.    removeTailFrom: listObj
  23.       ^ <primitive 209 4 46 listObj>
  24. |
  25.    enqueue: nodeObj toList: listObj
  26.       <primitive 209 4 47 listObj nodeObj>
  27. |
  28.    findNamedNode: nodeName in: listObj
  29.       ^ <primitive 209 4 48 listObj nodeName>
  30. |
  31.    dispose 
  32.       <primitive 209 0 2 private>.
  33.  
  34.       ^ nil
  35. |
  36.    new: newListName
  37.       private  <- <primitive 209 0 1 99>.
  38.      
  39.       listName <- newListName.
  40.       
  41.       ^ self
  42. ]
  43.  
  44. " -------------------------------------------------------------------- "
  45. " What good is an EList without ENodes??                               "
  46. " -------------------------------------------------------------------- "
  47.  
  48. Class ENode :Object ! private myName !
  49. [
  50.    new: newNodeName ! temp !
  51.       private <- <primitive 209 0 1 105>.
  52.       temp    <- <primitive 209 0 0 (newNodeName size)>.
  53.  
  54.       <primitive 209 0 5 temp newNodeName 0>.
  55.       <primitive 209 0 6 private temp 10>.
  56.  
  57.       myName <- newNodeName.
  58.       
  59.       ^ self
  60. |
  61.    dispose
  62.       <primitive 209 0 2 <primitive 209 0 7 private 10> >.
  63.       <primitive 209 0 2 private>.
  64.  
  65.       ^ nil
  66. |
  67.    successor ! bytes succNode !
  68.       bytes <- ByteArray new: 4.
  69.       
  70.       <primitive 209 0 3 private bytes 0>.
  71.       
  72.       succNode <- (bytes at: 1) bitShift: 24.
  73.       succNode <- succNode + ((bytes at: 2) bitShift: 16).
  74.       succNode <- succNode + ((bytes at: 3) bitShift: 8).
  75.       succNode <- succNode +  (bytes at: 4).
  76.  
  77.       ^ succNode " This node is next in a EList "
  78. |
  79.    predecessor ! bytes predNode !
  80.       bytes <- ByteArray new: 4.
  81.       
  82.       <primitive 209 0 3 private bytes 4>.
  83.       
  84.       predNode <- (bytes at: 1) bitShift: 24.
  85.       predNode <- predNode + ((bytes at: 2) bitShift: 16).
  86.       predNode <- predNode + ((bytes at: 3) bitShift: 8).
  87.       predNode <- predNode +  (bytes at: 4).
  88.  
  89.       ^ predNode " This node is before me in a EList "
  90. |
  91.    nodeType ! bytes !
  92.       bytes <- ByteArray new: 2.
  93.       
  94.       <primitive 209 0 3 private bytes 8>.
  95.       
  96.       ^ bytes at: 1
  97. |
  98.    nodePriority ! bytes !
  99.       bytes <- ByteArray new: 2.
  100.       
  101.       <primitive 209 0 3 private bytes 9>.
  102.       
  103.       ^ bytes at: 1
  104. |
  105.    nodeName
  106.       ^ myName
  107. |
  108.    setSuccessor: successorNode
  109.       <primitive 209 0 6 private successorNode 0>.
  110. |
  111.    setPredecessor: predecessorNode
  112.       <primitive 209 0 6 private predecessorNode 4>.
  113. |
  114.    setNodeType: nodeType  " nodeType has to be an Integer! "
  115.       <primitive 209 0 6 private (nodeType bitAnd: 16rFF) 8>.
  116. |
  117.    setNodePriority: newPriority
  118.       <primitive 209 0 6 private (newPriority bitAnd: 16rFF) 9>.
  119. |
  120.    changeNodeName: newNodeName ! temp !
  121.  
  122.       <primitive 209 0 2 <primitive 209 0 7 private 10> >.
  123.  
  124.       temp <- <primitive 209 0 0 (newNodeName size)>.
  125.  
  126.       <primitive 209 0 5 temp newNodeName 0>.
  127.       <primitive 209 0 6 private temp 10>.
  128.       
  129.       myName <- newNodeName
  130. ]
  131.